//
//  WJCommonUtils+date.m
//  boss
//
//  Created by 王军 on 2016/10/25.
//  Copyright © 2016年 王军. All rights reserved.
//

#import "WJCommonUtils+date.h"

@implementation WJCommonUtils (date)

//将日期变成时间 @"yyyy-MM-dd HH:mm:ss"
+(NSString *)dateFormat:(NSDate *)date format:(NSString *)format{
    //实例化一个NSDateFormatter对象
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //设定时间格式,这里可以设置成自己需要的格式
    [dateFormatter setDateFormat:format];
    //用[NSDate date]可以获取系统当前时间
    NSString *currentDateStr = [dateFormatter stringFromDate:date];
//    [dateFormatter release];
    return currentDateStr;
}

//获得当前标准时间
+(NSString *)dateStandardStr{
    return [WJCommonUtils dateFormat:[NSDate new] format:@"yyyy-MM-dd HH:mm:ss"];
}

//将一个格式化的日期变为date
+(NSDate *)dateFromString:(NSString *)dateStr format:format{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:format];
    return [dateFormatter dateFromString:dateStr];
}

//重新格式化
+(NSString *)dateReFormat:(NSString *)dateStr oldFormat:(NSString *)oldFormat newFormat:(NSString *)newFormat{
    NSDate *date = [WJCommonUtils dateFromString:dateStr format:oldFormat];
    NSString *str = [WJCommonUtils dateFormat:date format:newFormat];
    return str;
}

//有一天，要获取那一天的那月的 月初和月末。默认返回月末。 type = first，返回月初
+(NSString *)getMonthFirstLastDay:(NSDate *)anyDate type:(NSString *)type{
    NSDate *beginDate = nil;
    NSDate *endDate = nil;
    double interval = 0;
     NSCalendar *calendar = [NSCalendar currentCalendar];
     [calendar setFirstWeekday:2];//设定周一为周首日
    BOOL ok = [calendar rangeOfUnit:NSCalendarUnitMonth startDate:&beginDate interval:&interval forDate:anyDate];
    //分别修改为 NSDayCalendarUnit NSWeekCalendarUnit NSYearCalendarUnit
    if (ok) {
        endDate = [beginDate dateByAddingTimeInterval:interval-1];
    }else {
        return @"";
    }
    if(![WJCommonUtils isBlankString:type] && [type isEqualToString:@"first"]){
        NSString *firstDayStr = [WJCommonUtils dateFormat:beginDate format:@"yyyy-MM-dd"];
        return firstDayStr;
    }//
    if(![WJCommonUtils isBlankString:type] && [type isEqualToString:@"last"]){
        NSString *lastDayStr = [WJCommonUtils dateFormat:endDate format:@"yyyy-MM-dd"];
        return lastDayStr;
    }//
    NSString *lastDayStr = [WJCommonUtils dateFormat:endDate format:@"yyyy-MM-dd"];
    return lastDayStr;
}

+(NSString *)getLastMonth:(NSString *)format{
    NSCalendar *calender = [NSCalendar currentCalendar];//获取NSCalender单例。
    NSDateComponents *cmp = [calender components:(NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[[NSDate alloc] init]];
    //设置属性，因为我只需要年和月，这个属性还可以支持时，分，秒。
    [cmp setMonth:[cmp month] - 1];
    //设置上个月，即在现有的基础上减去一个月。这个地方可以灵活的支持跨年了，免去了繁琐的计算年份的工作。
    NSDate *lastMonDate = [calender dateFromComponents:cmp];
    //拿到上个月的NSDate，再用
    NSString *lastDayStr = [WJCommonUtils dateFormat:lastMonDate format:format];
    return lastDayStr;
}

//传入一个日期，获得这个日期对应显示的比如3分钟前之类
+(NSString *)getDateAgoStr:(NSDate *)date withNow:(NSDate *)nowDate{
    //小于60秒，1分钟前
    //小于一小时，x分钟前
    //小于24小时，x小时前
    //小于一周，x天前
    //大于等于一周，显示年-月-日
    NSTimeInterval second = [nowDate timeIntervalSinceDate:date];
    if(second >= 0 && second <= 60){
        return @"1分钟前";
    }
    if(second <= 60*60){
        return [NSString stringWithFormat:@"%.0f分钟前",floor(second/60.)];
    }
    if(second <= 60*60*24){
        return [NSString stringWithFormat:@"%.0f小时前",floor(second/3600.)];
    }
    if(second <= 60*60*24*7){
        return [NSString stringWithFormat:@"%.0f天前",floor(second/(24*3600.))];
    }
    return [WJCommonUtils dateFormat:date format:@"yyyy-MM-dd"];
}

@end
